package com.gk.javaservice.util.auto;

import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.gk.javaservice.po.AtsPersonnel;
import com.gk.javaservice.po.Config;
import com.gk.javaservice.service.AtsPersonnelService;
import com.gk.javaservice.service.ConfigService;
import com.gk.javaservice.util.javaRequest.HttpUtilNew;
import com.gk.javaservice.util.time.TimeUtil;
import net.sf.json.JSONArray;
import org.apache.http.HttpException;
import org.apache.http.conn.HttpHostConnectException;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.io.IOException;
import java.util.List;

@Component
@EnableScheduling
public class AutoUpdateStatus {

    @Autowired
    private AtsPersonnelService baseService;
    @Autowired
    private ConfigService configService;
    private Logger log = Logger.getLogger(this.getClass());


    @PostConstruct //这个注解是 程序启动就执行一次 class上要加上 @Component 注解才能起效
    private void updateStatusToEnd() {


    }


    @PostConstruct //这个注解是 程序启动就执行一次 class上要加上 @Component 注解才能起效
    @Scheduled(cron = "0 */5 * * * ?") //定时循环调用 class上要加上 @Component @EnableScheduling 注解才能起效
    private void updateStatusToEnd5() {
        try {
            geiList();
        }catch (Exception e){
            e.printStackTrace();
        }


    }

    private void geiList(){
        log.info("in to 自动更新设备信息");
        String url = "http://192.168.10.155:85/api/user/List";
        Config cf= configService.hasByKey("RTLSServer");
        JSONObject jjj=JSONObject.parseObject(cf.getValue());
        url = "http://"+jjj.getString("ip")+":"+jjj.getString("port")+"/api/user/List";
//        JSONObject value = para.getJSONObject("value");
        log.info(url);
//        log.info(value);
        JSONObject msg = HttpUtilNew.doGet(url, null);
//        log.info("msg:");
//        log.info(msg);
        if(msg!=null){
            String data = msg.getString("Payload");
            JSONArray json = JSONArray.fromObject(data);
//        log.info("json:" + json.size());
//        log.info(json);
            if (json.size() > 0) {
                for (int i = 0; i < json.size(); i++) {
//                log.info("json.getJSONObject(i):" + i);
//                log.info(json.getJSONObject(i));

                    ObjectMapper mapper = new ObjectMapper();

                    try {
                        AtsPersonnel user = mapper.readValue(json.getJSONObject(i).toString(), AtsPersonnel.class);
//                        log.info("user:");
//                        log.info(user);
                        if(baseService.countByuserId(user.getUserId())<1){
                            user.setCodeurl("http://"+jjj.getString("ip")
                                    +"/Frame/Position?sectionCode="+user.getSectionCode());
                            user.setKeyurl("http://"+jjj.getString("ip")
                                    +"/Frame/UserKeyPosition?userKey="+user.getUserKey());
                            baseService.add(user);
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }

    }

}
//定时循环调用  @Scheduled 注解   用于定时循环执行任务

//        @Scheduled(cron="0 */10 * * * ?")　　表示每隔十分钟执行一次
//        每隔5秒执行一次："*/5 * * * * ?"
//
//        每隔1分钟执行一次："0 */1 * * * ?"　　
//
//        每天23点执行一次："0 0 23 * * ?"
//
//        每天凌晨1点执行一次："0 0 1 * * ?"
//
//        每月1号凌晨1点执行一次："0 0 1 1 * ?"
//
//        每月最后一天23点执行一次："0 0 23 L * ?"
//
//        每周星期天凌晨1点实行一次："0 0 1 ? * L"
//
//        在26分、29分、33分执行一次："0 26,29,33 * * * ?"
//
//        每天的0点、13点、18点、21点都执行一次："0 0 0,13,18,21 * * ?"
//
//        表示在每月的1日的凌晨2点调度任务："0 0 2 1 * ? *"
//
//        表示周一到周五每天上午10：15执行作业："0 15 10 ? * MON-FRI"
//
//        表示2002-2006年的每个月的最后一个星期五上午10:15执行："0 15 10 ? 6L 2002-2006